#include "bcos_model.h"
#include "stm32f10x.h"

void led0_on(void)
{
    GPIO_ResetBits(GPIOB, GPIO_Pin_5);
}

void led1_on(void)
{
    GPIO_ResetBits(GPIOE, GPIO_Pin_5);
}

void led0_off(void)
{
    GPIO_SetBits(GPIOB, GPIO_Pin_5);
}

void led1_off(void)
{
    GPIO_SetBits(GPIOE, GPIO_Pin_5);
}

int led_write(char *buffp, uint32_t len)
{
	switch(buffp[0])
	{
		case 0:
			if (buffp[1] == 1)
			{
				led0_on();
			}
			else
			{
				led0_off();
			}
			break;
		case 1:
			if (buffp[1] == 1)
			{
				led1_on();
			}
			else
			{
				led1_off();
			}
			break;
	}
	
	return len;
}

model_ops_t led_ops =
{
	.name = "led",
	.write = led_write,
};

void led_init(void)
{
    GPIO_InitTypeDef  GPIO_LED;  

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE); 

    GPIO_LED.GPIO_Pin = GPIO_Pin_5;
    GPIO_LED.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_LED.GPIO_Mode = GPIO_Mode_Out_OD;              
    GPIO_Init(GPIOB, &GPIO_LED);

    GPIO_LED.GPIO_Pin = GPIO_Pin_5;
    GPIO_LED.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_LED.GPIO_Mode = GPIO_Mode_Out_OD;               
    GPIO_Init(GPIOE, &GPIO_LED);

    led0_off();
    led1_off();
	
	bcos_model_register(&led_ops);
}

BCOS_MODULE_INIT(led_init);
